Coordmaster
Step_tp wait 0 /* 0AB1: call_scm_func @Step_tp 8 x y z step delay level mode LStep Параметры: 0@ x 1@ y 2@ z //Координаты точки в которую телепортируемся 3@ Distance of step // Основной шаг телепорта 4@ Delay // Задержка между телепортами 5@ Level // На каком уровне телепортироваться 6@ Mode / Sync / Visibe // Режим телепорта, видимый, или на синхронизации 7@ Level up / down step // Шаг при подъеме на конечную точку, или спуске на уровень */ var 0@: float 1@: float 2@: float 3@: float 4@: integer 5@: float 6@: integer 7@: float // 8@: float 9@: float 10@: float 11@: float // 12@: float 13@: float 14@: float // 32@: integer end 00A0: store_actor $PLAYER_ACTOR position_to 12@ 13@ 14@ //Сохраняем текущие координаты 8@ = 0@ //Пересохраняем координаты конечной точки для операций 9@ = 1@ 10@ = 2@ if 6@ 1 //Проверка на режим телепорта (видимый режим, или отправка пакетов) then //Отключаем коллизию что бы игрок / машина не падали при шаговом телепорте if 00DF: actor $PLAYER_ACTOR driving then 03C0: 20@ = actor $PLAYER_ACTOR car 099A: set_car 20@ collision_detection 0 //Коллизия машины 0519: set_car 20@ locked 1 else 0619: enable_actor $PLAYER_ACTOR collision_detection 0 //Коллизия иггрока end else // Если режим синхронизации то отключаем синхронизацию if 00DF: actor $PLAYER_ACTOR driving then 0B2E: 20@ = read_samp_memory offset 24672 size 1 //Сохраняем для последующего включения при окончании телепорта 0B2D: write_samp_memory offset 24672 value 195 size 1 //Синхронизация в машине else 0B2E: 20@ = read_samp_memory offset 17104 size 1 //Сохраняем для последующего включения при окончании телепорта 0B2D: write_samp_memory offset 17104 value 195 size 1 //Синхронизация пешком end end //телепорт на указанный уровень (параметр Level 5@) 050A: 11@ = distance_between_XYZ 12@ 13@ 14@ and_XYZ 12@ 13@ 5@ //Расстояние от текущего положения игрока до положения игрока на уровне телепорта. while 11@ > 7@ // Если расстояние больше чем в одном шаге спуска / подъема (Параметр 7@ Level up / down step) Тогда цикл работает иначе пропускается wait 0 32@ = 0 //Обнуляем счетчик if 14@ > 5@ // Если уровень ниже текущего ложения игрока then 14@ -= 7@ // Тогда отнимаем от его позиции указанный шаг if 6@ 0 //Если 0 - режим синхронизации then //Отправка координат в пакете синхронизации else 08C7: put_actor $PLAYER_ACTOR at 12@ 13@ 14@ end else Иначе Если нужный уровень выше текущей позиции игрока, тогда прибавляем нужный шаг для достижения уровня 14@ += 7@ if 6@ 0 then //Отправка координат в пакете синхронизации else 08C7: put_actor $PLAYER_ACTOR at 12@ 13@ 14@ end end 050A: 11@ = distance_between_XYZ 12@ 13@ 14@ and_XYZ 12@ 13@ 5@ //Опять узнаем расстояние от игрока до уровня repeat wait 1 until 32@ >= 4@ // Задержка (Параметр 4@) end //Если цикл пропускается значит расстояние от игрока до уровня телепорта меньше чем в одном шаге и тогда сразу телепортируем его. if 6@ 0 then //Отправка координат в пакете синхронизации else 08C7: put_actor $PLAYER_ACTOR at 12@ 13@ 5@ end 32@ = 0 //Задержка по счетчику repeat wait 1 until 32@ >= 4@ //Теперь игрок на нужном нам уровне //телепорт до указанной точки на уровне 0509: 11@ = distance_between_XY 12@ 13@ and_XY 0@ 1@ Узнаем расстояние до нужной нам точки не учитывая Z 8@ -= 12@ 9@ -= 13@ 0604: get_Z_angle_for_point 8@ 9@ store_to 14@ //Угол while 11@ > 3@ wait 0 32@ = 0 02F6: 8@ = sine 14@ 02F7: 9@ = cosine 14@ 8@ *= 3@ 9@ *= 3@ 12@ -= 8@ 13@ += 9@ if 6@ 0 then //Отправка координат в пакете синхронизации else 08C7: put_actor $PLAYER_ACTOR at 12@ 13@ 5@ end 0509: 11@ = distance_between_XY 12@ 13@ and_XY 0@ 1@ repeat wait 1 until 32@ >= 4@ end if 6@ 0 then //Отправка координат в пакете синхронизации else 08C7: put_actor $PLAYER_ACTOR at 0@ 1@ 5@ end 32@ = 0 repeat wait 1 until 32@ >= 4@ //Телепортация до конечной точки 050A: 11@ = distance_between_XYZ 0@ 1@ 5@ and_XYZ 0@ 1@ 2@ while 11@ > 7@ wait 0 32@ = 0 if 5@ > 2@ then 5@ -= 7@ if 6@ 0 then //Отправка координат в пакете синхронизации else 08C7: put_actor $PLAYER_ACTOR at 0@ 1@ 5@ end else 5@ += 7@ if 6@ 0 then //Отправка координат в пакете синхронизации else 08C7: put_actor $PLAYER_ACTOR at 0@ 1@ 5@ end end 050A: 11@ = distance_between_XYZ 0@ 1@ 5@ and_XYZ 0@ 1@ 2@ repeat wait 1 until 32@ >= 4@ end 08C7: put_actor $PLAYER_ACTOR at 0@ 1@ 2@ // тп на поверхность не дописан!!! if 6@ 1 then //Включаем коллизию if 00DF: actor $PLAYER_ACTOR driving then 099A: set_car 20@ collision_detection 1 0519: set_car 20@ locked 0 else 0619: enable_actor $PLAYER_ACTOR collision_detection 1 end else //Включаем синхронизацию if 00DF: actor $PLAYER_ACTOR driving then 0B2D: write_samp_memory offset 24672 value 20@ size 1 else 0B2D: write_samp_memory offset 17104 value 20@ size 1 end end 0AB2: ret 0 На любом нормальном сервере можно телепортироваться по 100.0+ метров. Объясняется тем, что при падении под текстуру вы падаете вниз и при достижении -100.0 метров движок игры телепортирует вас на ближайшие пути, которые могут быть дальше 100.0 метров от падения. Поэтому при -100.0 метров у вас иммунитет на телепорт 100.0+ метров. Для этого в коордмастере и используется режим синхронизации. В обычном режиме телепортироваться NOпалевно на уровне -300.0 метров не получится, а вот отправлять синхронизацию вполне можно, причем перс не будет появляться на ближайших путях у других, а вот, если телепортироваться с машиной, то вы будете на уровне -300.0 метров, а вот машина будет телепортироваться по ближайшим путям, это вроде как фишка мультиплеера при отключении синхронизации перса кидает на крышу его машины, а если отправлять пакеты самому, то тачка с вами будет появляться и исчезать в точках маршрута, крч идите в пизду кому че не понятно пишиите. Еще на некоторых серверах проверка на достижение -100.0 метров и одновременно на скорость по оси z, поэтому если использовать только отправку -100.0 метров то может не сработать, на серверах где все это не предусмотрено, сделать кикер путем кидания под текстуру или на -95.0 метров с машины проще простого.